package com.yuelife.service.controller;

import com.alipay.api.AlipayApiException;
import com.yuelife.service.pojo.SOrder;
import com.yuelife.service.service.AlipayService;
import com.yuelife.service.service.SOrderService;
import com.yuelife.service.service.SProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/alipay")
@CrossOrigin//解决跨域的注解  但是只能局部  不能全局 全局需要在启动类中写个bean
public class AlipayController {
    @Autowired
    private AlipayService alipayService;
    @Autowired
    private SOrderService sOrderService;
    @Autowired
    private SProductService sProductService;
    @Autowired
    private RedisTemplate redisTemplate;


    @ResponseBody
    @GetMapping("/OrderPay")
    public Map payMent(SOrder sOrder) {
        Map map=new HashMap();
        try {
            String result=alipayService.aliPay(sOrder);
            map.put("code",200);
            map.put("data",result);
            return map;
        }catch (AlipayApiException e) {
            e.printStackTrace();
            map.put("code",500);
            map.put("data","出现错误");
            return map;
        }
    }

    @GetMapping("/zfbOrderPay")
    public void zfbOrderPay(SOrder sOrder, HttpServletRequest request, HttpServletResponse response)throws AlipayApiException, IOException{
      //  Map map=new HashMap();
        try {
//            String result=alipayService.zfbOrderPay(response,request,mOrder);
            System.out.println(sOrder);
            alipayService.zfbOrderPay(response,request,sOrder);
//            map.put("code",200);
//            map.put("data",result);
//            return map;
        }catch (AlipayApiException e) {
            e.printStackTrace();
//            map.put("code",500);
//            map.put("data","出现错误");
//            return map;
        }
    }
    //支付成功之后修改数据库订单状态
    @RequestMapping("/zfbSuccess")
    @Transactional
    public String zfbSuccess(HttpServletRequest request){

        //怎么可以消费队列中的指定消息?   路由key？因为存到队列的时候是 "waitpay."+mOrder.getOrderSn()   可不可以通过路由key消费？
        //          答：：：：：：：思路错了，支付成功之后不用消费指定的消息，直接全部被死信消费，死信消费的时候可以得到队列消息中的订单，将该订单与数据库中的比较，判断一下，如果没有支付的就直接消费签收，支付成功的就不签收
//        channel.basicAck(id,false);

        System.out.println("我是支付宝支付成功过后的");
        //得到之前的订单编号，不是支付宝里面创建的交易号
        Integer zfbOrderSn=(Integer.valueOf(request.getParameter("out_trade_no")));
        //得到支付宝的支付交易号
        String tradeNo =request.getParameter("trade_no");
        //得到商品名称
//        String productName=request.getParameter("subject");
        //得到交易金额
        String price=request.getParameter("total_amount");
        //更新数据库字段
        sOrderService.updateStatuspay(zfbOrderSn);
//        System.out.println("我是订单号："+zfbOrderSn);
//        System.out.println("我是支付宝交易号："+tradeNo);
//        System.out.println("我是商品名称"+productName);
//        System.out.println("我是交易金额"+price);
       // SOrder sOrder=new SOrder();
       // sOrder.setOrderSn(zfbOrderSn);
        //sOrder.setStatus("1");
       // sOrder.setTradeNo(tradeNo);
        //在这之前需要去订单数据库查询得到商品编号
        String productSn= null;
        try {
         /*   productSn = sOrderService.selectProductSnByOrderSn(zfbOrderSn);
            //支付成功之后需要修改数据库中的订单，并且添加支付宝的交易号
            sOrderService.updateBySn(mOrder);
            //需要得到该商品的卖家消息，主要是得到卖家的电话号码，然后为了发送短信推送，提示尽快发货
            User user =mProductService.selectTelephone(productSn);
            //电话号码
            String telepone=user.getTelephone();
            System.out.println("手机号：：：：："+telepone);
            //发送的短信提醒信息
            String content="亲爱的"+user.getName()+"，您有一个商品被购买，"+"订单号是："+zfbOrderSn+"，该订单由支付宝支付，支付交易号："+
                    tradeNo+"，交易金额："+price+"，请您尽快发货哦！";
            //由于短信模板不能超过十个字符，所以写少点
            String content1="jkfh";*/
//            Demo短信验证码 note=new Demo短信验证码();
//            note.您的验证码是XXXHttpsSyncTest(telepone,content1);


        } catch (Exception e) {
            e.printStackTrace();
        }
        //并且修改redis中的商品列表数据
        //redisTemplate.opsForHash().delete("myProductList",productSn);

        return "zfbSuccessBackApp"; //成功之后跳转到一个页面，由该页面进行跳转到APP
    }




}
